package com.kzj.mls.util;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;

import com.ab.util.AbLogUtil;
import com.kzj.mls.R;
import com.kzj.mls.global.App;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.umeng.analytics.MobclickAgent;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

public class ImageUtil {

	
	public static DisplayImageOptions OptionsNormalRadius(){
		DisplayImageOptions options = new DisplayImageOptions.Builder()
		 .showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
		 .showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
		.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
		.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
		.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
		.cacheOnDisk(true)
		.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
		.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
		.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
		//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
		//设置图片加入缓存前，对bitmap进行设置  
		//.preProcessor(BitmapProcessor preProcessor)  
		.resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位   
		.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角，弧度为多少
		//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
		.build();//构建完成  
		return options;
	}
	/**
	 * 自定義圓角
	 * @param size 弧度
	 * @return
	 */
	public static DisplayImageOptions OptionsNormalRadiusNum(int size){
		DisplayImageOptions options = new DisplayImageOptions.Builder()
		.showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
		.showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
		.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
		.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
		.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
		.cacheOnDisk(true)
		.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
		.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
		.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
		//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
		//设置图片加入缓存前，对bitmap进行设置  
		//.preProcessor(BitmapProcessor preProcessor)  
		.resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位   
		.displayer(new RoundedBitmapDisplayer(size))//是否设置为圆角，弧度为多少
		//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
		.build();//构建完成  
		return options;
	}
	 public static File  BitmapToFile(Bitmap b) {
	    	File file=null;
	        if (b != null) {
	        	Random random=new Random();
	        	
	            FileOutputStream fos = null;
	            String SavePath = Environment.getExternalStorageDirectory().toString()+"/DCIM/ScreenImages/";
	            try {
	            	File path = new File(SavePath);
	            	String filename = SavePath+"Bitmap"+random.nextInt(10000)+
	                         System.currentTimeMillis()+".jpg";
	               /* String filename = SavePath+"Bitmap"+random.nextInt(10000)+
	                         DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";*/
	                if (!path.exists()) {
	                	path.mkdirs();
	    			}
	                fos = new FileOutputStream(filename);;
	                b.compress(CompressFormat.JPEG, 90, fos);
	                file=new File(filename);
	                sendBroadCaseRemountSDcard(file);
	            } catch (IOException ex) {
	                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
	            } finally {
	                if (fos != null) {
	                try {
	                    fos.close();
	                } catch (IOException ex) {
	   }}}}
	        return file;
	    }
	public static File  BitmapToFile50(Bitmap b,String floderPath) {
		File file=null;
		String SavePath = Environment.getExternalStorageDirectory().toString()+"/DCIM/ScreenImages/";;
		if (floderPath!=null)
		{
			SavePath=floderPath;
		}
		if (b != null) {
			FileOutputStream fos = null;

			try {
				File path = new File(SavePath);
				// String filename = SavePath+File.separator+"Bitmap"+ DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";
				String filename = SavePath+File.separator+"Bitmap"+ System.currentTimeMillis() + ".jpg";
				if (!path.exists()) {
					path.mkdirs();
				}
				fos = new FileOutputStream(filename);;
				b.compress(CompressFormat.JPEG, 60, fos);
				file=new File(filename);
			} catch (IOException ex) {
				// MINI_THUMBNAIL not exists, ignore the exception and generate one.
			} finally {
				if (fos != null) {
					try {
						fos.close();
					} catch (IOException ex) {
					}}}}
		return file;
	}
	 public static File  BitmapToFile(Bitmap b,String floderPath) {
	    	File file=null;
	        if (b != null) {
	            FileOutputStream fos = null;
	            String SavePath = floderPath;
	            try {
	            	File path = new File(SavePath);
	               // String filename = SavePath+File.separator+"Bitmap"+ DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";
	                String filename = SavePath+File.separator+"Bitmap"+ System.currentTimeMillis() + ".jpg";
	                if (!path.exists()) {
	                	path.mkdirs();
	    			}
	                fos = new FileOutputStream(filename);;
	                b.compress(CompressFormat.JPEG, 90, fos);
	                file=new File(filename);
	            } catch (IOException ex) {
	                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
	            } finally {
	                if (fos != null) {
	                try {
	                    fos.close();
	                } catch (IOException ex) {
	   }}}}
	        return file;
	    }

	 public static File  BitmapToFileNoSave(Bitmap b) {
	    	File file=null;
	        if (b != null) {
	            FileOutputStream fos = null;
	            String SavePath = Environment.getExternalStorageDirectory().toString()+"/DCIM/ScreenImages/";
	            try {
	            	File path = new File(SavePath);
	              //  String filename = SavePath+"Bitmap"+DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS);
	                String filename = SavePath+"Bitmap"+System.currentTimeMillis();
	                if (!path.exists()) {
	                	path.mkdirs();
	    			}
	                fos = new FileOutputStream(filename);
	                b.compress(CompressFormat.JPEG, 90, fos);
	                file=new File(filename);
	            } catch (IOException ex) {
	            	  MobclickAgent.reportError(App.getInstance(), "BitmapToFileNoSave catch" + ex.getCause());
	            	ex.printStackTrace();
	                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
	            } finally {
	                if (fos != null) {
	                try {
	                    fos.close();
	                } catch (IOException ex) {
	   }}}}else
	   {

		   MobclickAgent.reportError(App.getInstance(), "BitmapToFileNoSave Bitmap NUll");
	   }
	        return file;
	    }
	 public static DisplayImageOptions OptionsNormalRadius18dp(){
			DisplayImageOptions options = new DisplayImageOptions.Builder()
			 .showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
			 .showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
			.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
			.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
			.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
			.cacheOnDisk(true)
			.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
			.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
			.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
			//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
			//设置图片加入缓存前，对bitmap进行设置  
			//.preProcessor(BitmapProcessor preProcessor)  
			.resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位   
			.displayer(new RoundedBitmapDisplayer(30))//是否设置为圆角，弧度为多少
			//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
			.build();//构建完成  
			return options;
		}
	 
	 public static DisplayImageOptions OptionsNormal(){
			DisplayImageOptions options = new DisplayImageOptions.Builder()
			 .showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
			 .showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
			.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
			.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
			.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
			.cacheOnDisk(true)
			.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
			.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
			.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
			//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
			//设置图片加入缓存前，对bitmap进行设置  
			//.preProcessor(BitmapProcessor preProcessor)  
			.resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位   
			//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
			.build();//构建完成  
			return options;
	    }

	 public static DisplayImageOptions OptionsNormalRadius360_Head(){
			DisplayImageOptions options = new DisplayImageOptions.Builder()
			 .showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
			 .showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
			.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
			.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
			.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
			.cacheOnDisk(true)
			.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
			.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
//			.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示  
			.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
			//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
			//设置图片加入缓存前，对bitmap进行设置  
			//.preProcessor(BitmapProcessor preProcessor)  
			.resetViewBeforeLoading(false)//设置图片在下载前是否重置，复位   
			
			.displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
			//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
			.build();//构建完成  
			return options;
		}
	//没有默认图，防止太闪
	public static DisplayImageOptions OptionsNormalRadius360_HeadNotDefault(){
		DisplayImageOptions options = new DisplayImageOptions.Builder()
				.cacheInMemory(true)//设置下载的图片是否缓存在内存中
				.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
				.cacheOnDisk(true)
				.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
				.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
//			.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
				.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
						//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
						//设置图片加入缓存前，对bitmap进行设置
						//.preProcessor(BitmapProcessor preProcessor)
				.resetViewBeforeLoading(false)//设置图片在下载前是否重置，复位

				.displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
						//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
				.build();//构建完成
		return options;
	}
	 public static DisplayImageOptions OptionsNormalRadius360_Gunion(){
			DisplayImageOptions options = new DisplayImageOptions.Builder()
			 .showImageOnLoading(R.drawable.white) //设置图片在下载期间显示的图片
			 .showImageForEmptyUri(R.drawable.white)//设置图片Uri为空或是错误的时候显示的图片
			.showImageOnFail(R.drawable.white)  //设置图片加载/解码过程中错误时候显示的图片
			.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
			.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
			.cacheOnDisk(true)
			.considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
			.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
			.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
			//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
			//设置图片加入缓存前，对bitmap进行设置  
			//.preProcessor(BitmapProcessor preProcessor)  
			.resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位   
			.displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
			//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
			.build();//构建完成  
			return options;
		}
		/** 
	     * 发送广播，重新挂载SD卡 
	     */  
	    public static void sendBroadCaseRemountSDcard(File mPhotoFile) {
	    	
	        /*
	         * 4.4不能用了
	         * Intent intent = new Intent();  
	        // 重新挂载的动作  
	        intent.setAction(Intent.ACTION_MEDIA_MOUNTED);  
	        // 要重新挂载的路径  
	        intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));  
	        AppConfig.getInstance().sendBroadcast(intent);  */
	    	try{
	        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                Intent mediaScanIntent = new Intent(
                        Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                Uri contentUri = Uri.fromFile(mPhotoFile); //out is your output file
                mediaScanIntent.setData(contentUri);
                App.getInstance().sendBroadcast(mediaScanIntent);
            } else {
				App.getInstance().sendBroadcast(new Intent(
                        Intent.ACTION_MEDIA_MOUNTED,
                        Uri.parse("file://"
                                + Environment.getExternalStorageDirectory())));
            }
        } catch (Exception e) {
            AbLogUtil.e("ImageUtil", "File not found: " + e.getMessage());
        } 
	    	//MediaScannerConnection.scanFile(AppConfig.getInstance(), new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()}, null, null);
	    }  
	    
	    //保存图片到系统相册，和指定路径
	    public static void saveImageToGallery(Context context, Bitmap bmp) {
	        // 首先保存图片
	        File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
	        if (!appDir.exists()) {
	            appDir.mkdir();
	        }
	        String fileName = System.currentTimeMillis() + ".jpg";
	        File file = new File(appDir, fileName);
	        try {
	            FileOutputStream fos = new FileOutputStream(file);
	            bmp.compress(CompressFormat.JPEG, 90, fos);
	            fos.flush();
	            fos.close();
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	    	}
	        
	        // 其次把文件插入到系统图库
	        try {
	            MediaStore.Images.Media.insertImage(context.getContentResolver(),
	    				file.getAbsolutePath(), fileName, null);
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        }
	        // 最后通知图库更新
	        sendBroadCaseRemountSDcard(file);
	       // context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
	    }
}
